home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / pid.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  63 lines

  1. #ifndef _LINUX_PID_H
  2. #define _LINUX_PID_H
  3.  
  4. #include <linux/wait.h>
  5. #include <linux/types.h>
  6. #include <asm/atomic.h>
  7.  
  8. enum pid_type
  9. {
  10.     PIDTYPE_PID,
  11.     PIDTYPE_TGID,
  12.     PIDTYPE_PGID,
  13.     PIDTYPE_SID,
  14.     PIDTYPE_MAX
  15. };
  16.  
  17. struct pid
  18. {
  19.     /* Try to keep pid_chain in the same cacheline as nr for find_pid */
  20.     int nr;
  21.     struct hlist_node pid_chain;
  22.     /* list of pids with the same nr, only one of them is in the hash */
  23.     struct list_head pid_list;
  24. };
  25.  
  26. #define pid_task(elem, type) \
  27.     list_entry(elem, struct task_struct, pids[type].pid_list)
  28.  
  29. /*
  30.  * attach_pid() and detach_pid() must be called with the tasklist_lock
  31.  * write-held.
  32.  */
  33. extern int FASTCALL(attach_pid(struct task_struct *task, enum pid_type type, int nr));
  34.  
  35. extern void FASTCALL(detach_pid(struct task_struct *task, enum pid_type));
  36.  
  37. #ifdef __KERNEL__
  38.  
  39. /*
  40.  * look up a PID in the hash table. Must be called with the tasklist_lock
  41.  * held.
  42.  */
  43. extern struct pid *FASTCALL(find_pid(enum pid_type, int));
  44.  
  45. extern int alloc_pidmap(void);
  46. extern void FASTCALL(free_pidmap(int));
  47. extern void switch_exec_pids(struct task_struct *leader, struct task_struct *thread);
  48.  
  49. #define do_each_task_pid(who, type, task)                \
  50.     if ((task = find_task_by_pid_type(type, who))) {        \
  51.         prefetch((task)->pids[type].pid_list.next);        \
  52.         do {
  53.  
  54. #define while_each_task_pid(who, type, task)                \
  55.         } while (task = pid_task((task)->pids[type].pid_list.next,\
  56.                         type),            \
  57.             prefetch((task)->pids[type].pid_list.next),    \
  58.             hlist_unhashed(&(task)->pids[type].pid_chain));    \
  59.     }                                \
  60.  
  61. #endif /* __KERNEL__ */
  62. #endif /* _LINUX_PID_H */
  63.